﻿using System;
using System.IO;
using System.IO.Compression;

namespace _020_创建zip压缩文档
{
    class Program
    {
        static void Main(string[] args)
        {

            string 压缩文件名 = "demo.zip";

            // 生成 zip 文档
            if (File.Exists(压缩文件名))
                File.Delete(压缩文件名);

            //创建压缩文档，并存入三个实体
            using (FileStream 发哥的文件创建方法 = File.Create(压缩文件名))
            {
                using (ZipArchive 文件来源name = new ZipArchive(发哥的文件创建方法, ZipArchiveMode.Create))
                {
                    //第一个文件
                    ZipArchiveEntry 操作之1 = 文件来源name.CreateEntry("docs/doc1.txt");
                    using (Stream 文件创建方法 = 操作之1.Open())
                    {
                        using (StreamWriter 创建一个txt文件 = new StreamWriter(文件创建方法))
                        {
                            创建一个txt文件.Write("示例文档 A");
                        }
                    }

                    //第二个文件
                    ZipArchiveEntry 操作之2 = 文件来源name.CreateEntry("docs/doc2.txt");
                    using (Stream 文件创建方法 = 操作之2.Open())
                    {
                        using (StreamWriter 创建一个txt文件 =new StreamWriter(文件创建方法 ))
                        {
                            创建一个txt文件.Write("示例文档 B");
                        }
                    }

                    //第三个文件

                    ZipArchiveEntry 操作之3 = 文件来源name.CreateEntry("docs/doc3.txt");
                    using (Stream 文件创建方法 =操作之3.Open())
                    {
                        using (StreamWriter 创建一个txt文件=new StreamWriter(文件创建方法 ))
                        {
                            创建一个txt文件.Write("示例文档 C");
                        }

                    }
                }
            }

            //解压文档中的实体
            using (FileStream 解压操作=File.OpenRead(压缩文件名))
            {
                using (ZipArchive 文件来源name=new ZipArchive(解压操作))
                {
                    foreach (ZipArchiveEntry et in 文件来源name.Entries)
                    {
                        using (Stream 操作=et.Open())
                        {
                            using (FileStream 操作的流=File.Create(et.Name))
                            {
                                操作.CopyTo(操作的流);
                            }
                        }
                    }
                }
            }



        }
    }
}
